package com.ray.mapper;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.ray.bean.CompanyMaterialCountBean;
import com.ray.bean.CompanyMaterialTableBean;
import com.ray.bean.FeedOrderDetailBean;
import com.ray.bean.FinishStockBean;
import com.ray.bean.OrderInfoDetailBean;
import com.ray.bean.PurchaseOrderBean;
import com.ray.bean.UserBean;
import com.ray.bean.WarehouseInOutDetailBean;
import com.ray.bean.WarehouseInSumMoneyBean;

public interface WarehouseMapper {
	
	/**
	 * 通过采购单获取出入库记录
	* @date 2018年9月15日 下午1:28:43 
	* @author 李斌
	* @return List<WarehouseInOutDetailBean> 
	* @throws
	 */
	List<WarehouseInOutDetailBean> getWarehouseInByPurchaseDetail(PurchaseOrderBean purchaseOrderBean);
	
	/**
	 * 审核出入库
	* @date 2018年9月17日 上午10:52:42 
	* @author 李斌
	* @return int 
	* @throws
	 */
	int updateWarehouInOutOnStatus(WarehouseInOutDetailBean wiodb);
	
	/**
	 * 删除出入库记录
	* @date 2018年9月19日 上午8:18:05 
	* @author 李斌
	* @return int 
	* @throws
	 */
	int deleteWarehouse(WarehouseInOutDetailBean wiodb);
	
	/**
	 * 修改出入库数量
	* @date 2018年9月19日 上午9:33:37 
	* @author 李斌
	* @return void 
	* @throws
	 */
	int updateWarehouseInOutCount(WarehouseInOutDetailBean wiodb);
	
	/**
	 * 获取出入库记录
	* @date 2018年9月19日 下午1:39:10 
	* @author 李斌
	* @return List<WarehouseInOutDetailBean> 
	* @throws
	 */
	List<WarehouseInOutDetailBean> getWarehouseInOutDetailData(Map<String, Object> map);
	int getWarehouseInOutDetailCount(Map<String, Object> map);
	
	/**
	 * 获取出入库制单人
	* @date 2018年9月19日 下午4:04:19 
	* @author 李斌
	* @return List<UserBean> 
	* @throws
	 */
	List<UserBean> getWarehouseInOutCreateUser(Map<String, Object> map);
	
	/**
	 * 获取出入库所有客户
	* @date 2018年9月19日 下午4:10:55 
	* @author 李斌
	* @return List<String> 
	* @throws
	 */
	List<UserBean> getCustomerNameByWarehouse(Map<String, Object> map);
	
	/**
	 * 获取出入库汇总
	* @date 2018年9月20日 上午8:36:48 
	* @author 李斌
	* @return List<WarehouseInOutDetailBean> 
	* @throws
	 */
	List<WarehouseInOutDetailBean> getInOutSummaryData(Map<String, Object> map);
	int getInOutSummaryCount(Map<String, Object> map);
	
	/**
	 * 根据库存信息获取出入库
	* @date 2018年9月20日 上午11:32:09 
	* @author 李斌
	* @return List<WarehouseInOutDetailBean> 
	* @throws
	 */
	List<WarehouseInOutDetailBean> getWarehouseInOutDetaliListByMaterial(Map<String, Object> map);
	
	/**
	 * 通过投料单获取出入库记录
	* @date 2018年9月20日 下午5:10:03 
	* @author 李斌
	* @return List<WarehouseInOutDetailBean> 
	* @throws
	 */
	List<WarehouseInOutDetailBean> getWarehouseOutDetailByFeed(FeedOrderDetailBean feedOrderDetailBean);
	
	/**
	 * 从车间退回到仓库的物料
	* @date 2018年9月29日 上午10:15:15 
	* @author 李斌
	* @return List<WarehouseInOutDetailBean> 
	* @throws
	 */
	List<WarehouseInOutDetailBean> getReturnToMaterialByFeed(Map<String, Object> map);
	
	/**
	 * 物料出库未确认数
	* @date 2018年10月13日 下午3:16:05 
	* @author 李斌
	* @return Double 
	* @throws
	 */
	CompanyMaterialCountBean getWarehouseOutByNotStatus(CompanyMaterialCountBean companyMaterialCountBean);
	
	/**
	 * 通过投料单查询投料单出库记录
	* @date 2018年10月29日 下午2:31:36 
	* @author 李斌
	* @return List<WarehouseInOutDetailBean> 
	* @throws
	 */
	List<WarehouseInOutDetailBean> getWarehouseOutDetailByFeedOrNotApproval(FeedOrderDetailBean feedDeatil);
	
	/**
	 * 获取成品出库数量
	 * @param map
	 * @return
	 */
	List<FinishStockBean> getFinishOutOrder(Map<String, Object> map);
	
	/**
	 * 通过订单信息获取投料单
	 * @param orderInfoDetail
	 * @return
	 */
	List<FeedOrderDetailBean> getFeedOrderDetailByOrderDetail(OrderInfoDetailBean orderInfoDetail);

	/**
	 * 获取半成品信息
	 * @param map
	 * @return
	 */
	List<WarehouseInOutDetailBean> getBlankMaterialData(Map<String, String> map);
	int getBlankMaterialCount(Map<String, String> map);
	
	/**
	 * 获取半成品出库未审核数量
	 * @param materialCode
	 * @param company
	 * @return
	 */
	BigDecimal getNotApprovalBlankMaterialCount(@Param("materialCode")String materialCode, @Param("company")String company);

	/**
	 * 获取成品出入库记录
	 * @param warehouseInOutDetailBeans
	 * @return
	 */
	List<WarehouseInOutDetailBean> getNotApprovalInOutRecord(@Param("loginCompany")String company);

	/**
	 * 获取出入库总价
	 * @param map
	 * @return
	 */
	Map getInOutSumPrice(Map map);

	/**
	 * 获取车间需退回数量
	 * @param map
	 * @return
	 */
	List<FeedOrderDetailBean> workShopNeedReturnMaterial(Map<String, String> map);
	int workShopNeedReturnMaterialCount(Map<String, String> map);

	/**
	 * 修改出入库记录的返回数量和金额
	 * @param wiodb
	 * @return
	 */
	int updateWarehouInReturnCountAndMoney(WarehouseInOutDetailBean wiodb);

	/**
	 * 
	 * @param map
	 * @return
	 */
	List<CompanyMaterialTableBean> warehouseBeyondMax(Map map);

	/**
	 * 获取超出库存下限的物料
	 * @param map
	 * @return
	 */
	List<CompanyMaterialTableBean> warehouseBeyondMin(Map map);

	/**
	 * 获取呆滞物料
	 * @param map
	 * @return
	 */
	List<CompanyMaterialTableBean> getStillnessMaterial(Map map);

	/**
	 * 获取收款拖期数据
	 * @param map
	 * @return
	 */
	List<WarehouseInOutDetailBean> getReceivablesDelayData(Map map);

	/**
	 * 
	 * @param orderId
	 * @return
	 */
	double getOrderToCoustomCount(@Param("orderId")String orderId);

	/**
	 * 订单设置完成
	 * @param orderId
	 */
	void setOrderFinish(@Param("orderId")String orderId);

}
